#include<Servo.h>

#define sound_pin1 0
#define sound_pin2 1

//全局变量
int sound_ave_data;//声音平均数据
Servo servo;//
//警告：以下变量将在for,while,do...while等语句处以及函数临时数据存储使用，禁止全局：i,j,k,a,b,c,d,e,f,x,y,z

//函数声明
static int sound_ave(int times);
static int arduino_main();

/*
   入口：采集次数（不允许超过500）
   出口：这一段时间的平均值
   作用：检测两个声道响度的平均值
*/
static int sound_ave(int times)
{
  //初始化变量
  int sound_pin1_data_ave = 0;
  int sound_pin2_data_ave = 0;
  int sound_pin1_data = 0;
  int sound_pin2_data = 0;
  int sound_pin1_data_sum = 0;
  int sound_pin2_data_sum = 0;
  int x;

  for (int i = 0; i < times; i++)//运行times次
  {
    //清零
    x = 0;
    //获取Pin1数据，不要0
    do
    {
      sound_pin1_data = analogRead(sound_pin1);
      x++;
    }
    while ((sound_pin1_data <= 0) and (x <= 10));

    //清零
    x = 0;
    //获取pin2数据，不要零
    do
    {
      sound_pin2_data = analogRead(sound_pin2);
      x++;
    }
    while ((sound_pin2_data <= 0) and (x <= 10));

    //将数据加入总和
    sound_pin1_data_sum += sound_pin1_data;
    sound_pin2_data_sum += sound_pin2_data;
  }

  //取平均值
  sound_pin1_data_ave = sound_pin1_data_sum / times;
  sound_pin2_data_ave = sound_pin2_data_sum / times;


  //返回没有除以二，因为数据原本的精度就不够
  return (sound_pin1_data_ave + sound_pin2_data_ave);
}

static int arduino_main()
{
  if (digitalRead(12) == HIGH)
  {
    sound_ave_data = sound_ave(200);
    Serial.println(sound_ave_data);
    if (sound_ave_data)
    }
  else
  {
    Serial.println(0);
  }
}

void setup() {
  //串口调试，可以ban掉
  Serial.begin(9600);
  pinMode(12, INPUT_PULLUP);
  servo.attach(9);
  servo.write(30);

  for (;;)
  {
    arduino_main();
  }

}

//不使用
void loop() {
}
